home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Tools / Languages / GCC 1.37.1r14 / usr / gcc-1.37.1r14 / non-obj files / gestalt.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-10-07  |  2.3 KB  |  125 lines  |  [TEXT/KAHL]

  1. #include <Traps.h>
  2. #include <OSUtils.h>
  3. #include <GestaltEqu.h>
  4. #include <Dialogs.h>
  5. #include <Fonts.h>
  6. #include <Menus.h>
  7. #include <Scrap.h>
  8. #include <Errors.h>
  9. #include <Events.h>
  10. #include <Memory.h>
  11. #include <Dialogs.h>
  12. #include <Windows.h>
  13. #include <OSEvents.h>
  14. #include <TextEdit.h>
  15. #include <ToolUtils.h>
  16. #include <Quickdraw.h>
  17.  
  18. #define TrapMask 0x0800
  19.  
  20. static short NumToolboxTraps( void )
  21. {
  22.     if (NGetTrapAddress(_InitGraf, ToolTrap) ==
  23.             NGetTrapAddress(0xAA6E, ToolTrap))
  24.         return(0x0200);
  25.     else
  26.         return(0x0400);
  27. }
  28.  
  29. static TrapType GetTrapType(short theTrap)
  30. {
  31.  
  32.     if ((theTrap & TrapMask) > 0)
  33.         return(ToolTrap);
  34.     else
  35.         return(OSTrap);
  36.  
  37. }
  38.  
  39. static Boolean TrapAvailable(short theTrap)
  40. {
  41.  
  42.     TrapType    tType;
  43.  
  44.     tType = GetTrapType(theTrap);
  45.     if (tType == ToolTrap)
  46.     theTrap = theTrap & 0x07FF;
  47.     if (theTrap >= NumToolboxTraps())
  48.         theTrap = _Unimplemented;
  49.  
  50.     return (NGetTrapAddress(theTrap, tType) !=
  51.             NGetTrapAddress(_Unimplemented, ToolTrap));
  52. }
  53.  
  54. static char *processor[] = {
  55.     "<unknown>",
  56.     "MC68000",
  57.     "MC68010",
  58.     "MC68020",
  59.     "MC68030",
  60.     "MC68040"
  61. };
  62.  
  63. static char *fpu[] = {
  64.     "<none>",
  65.     "MC68881",
  66.     "MC68882",
  67.     "MC68040 built-in"
  68. };
  69.  
  70. static void aprintf(char *format, ...)
  71.     {
  72.     Str255    param0;
  73.     unsigned char *p = ¶m0[1];
  74.     va_list ap;
  75.     va_start(ap, format);
  76.     vsprintf((char *)p, format, ap);
  77.     va_end( ap );
  78.     while (*p)
  79.         {
  80.         if (*p == '\n') *p = '\r';
  81.         ++p;
  82.         }
  83.     *param0 = p-param0-1;
  84.     ParamText(param0,0,0,0);
  85.     Alert(128,0);
  86.     }
  87.  
  88. int gestalt_test (int);
  89.  
  90. int gestalt_test (int minmajor)
  91.     {
  92.     char *cpu,*fp;
  93.     int major,minor;
  94.     long gestaltAnswer;
  95.     InitGraf(&qd.thePort);
  96.     InitFonts();
  97.     FlushEvents(everyEvent, 0);
  98.     InitWindows();
  99.     InitMenus();
  100.     TEInit();
  101.     InitDialogs(0L);
  102.     InitCursor();
  103.     if (TrapAvailable(_Gestalt)) {
  104.         Gestalt (gestaltProcessorType, &gestaltAnswer);
  105.         if (gestaltAnswer >= sizeof(processor)/sizeof(processor[0])) gestaltAnswer = 0;
  106.         cpu = processor[gestaltAnswer];
  107.         Gestalt (gestaltFPUType, &gestaltAnswer);
  108.         if (gestaltAnswer >= sizeof(fpu)/sizeof(fpu[0])) gestaltAnswer = 0;
  109.         fp = fpu [gestaltAnswer];        
  110.         Gestalt (gestaltSystemVersion, &gestaltAnswer);
  111.         major = gestaltAnswer>>8;
  112.         minor = gestaltAnswer&255;
  113.         if (major < minmajor) aprintf ("System Version: %d.%d\n"
  114.                  "Processor %s, FPU %s\n"
  115.                  "Sorry, System %d required\n"
  116.                  , major, minor, cpu, fp, minmajor);
  117.     } else
  118.         {
  119.         aprintf ("Gestalt not available\n");
  120.         major = 0;
  121.         }
  122.     return major;
  123.     }
  124.  
  125.